#include <stdio.h>
#include <signal.h>
//声明这个变量可能被更改，不能被优化，需要从内存中读取
volatile int flag = 0;
void handler(int sig)
{
    printf("chage flag 0 to 1\n");
    flag = 1;
}

int main()
{
    signal(2, handler);
    while (!flag)
        ;
    printf("process quit normal\n");
    return 0;
}

//gcc -o sig sig.c -O2优化情况下
// #include <stdio.h>
// #include <signal.h>
// int flag = 0;
// void handler(int sig)
// {
//     printf("chage flag 0 to 1\n");
//     flag = 1;
// }

// int main()
// {
//     signal(2, handler);
//     while (!flag)
//         ;
//     printf("process quit normal\n");
//     return 0;
// }
// ^Cchage flag 0 to 1
// ^Cchage flag 0 to 1
// ^Cchage flag 0 to 1
// ^Cchage flag 0 to 1

//gcc -o sig sig.cc,没有优化的情况下，flag==1 会退出；
// #include <stdio.h>
// #include <signal.h>
// int flag = 0;
// void handler(int sig)
// {
//     printf("chage flag 0 to 1\n");
//     flag = 1;
// }

// int main()
// {
//     signal(2, handler);
//     while (!flag)
//         ;
//     printf("process quit normal\n");
//     return 0;
// }

//^Cchage flag 0 to 1
//process quit normal